/**
 * 
 */
package com.sunwayhorizo.health.business.clinic.emr.template;

import java.util.List;

import javax.ejb.Local;

import com.sunwayhorizo.health.business.dto.ResultsDTO;
import com.sunwayhorizo.health.business.dto.clinic.emr.template.TemplateDTO;
import com.sunwayhorizo.health.hl7.common.Hl7Exception;
import com.sunwayhorizo.health.hl7.datatypes.CE;
import com.sunwayhorizo.health.hl7.rim.Document;

/**
 * @ClassName TemplateManagerLocal <br>
 * @PackageName com.sunwayhorizo.health.business.emr.template.action <br>
 * @Description 模板管理接口 <br>
 * @Author jinzw <br>
 * @Date 2010-12-13 <br>
 * @Version 1.0 <br>
 * @ModifiedDesc <br>
 * @ModifiedDate <br>
 * @ModifiedBy <br>
 * @Copyright 2010-2020 北京三维海容 All Rights Reserved. <br>
 */
@Local
public interface TemplateManagerLocal {
	
	/**
	 * 添加模板
	 * @param template
	 * @return
	 * @throws Hl7Exception
	 */
	public ResultsDTO newTemplate(TemplateDTO template) throws Hl7Exception;
	
	/**
	 * 删除模板，模板文件状态不为0的都不能删除
	 * @param templateIds
	 * @return
	 * @throws Hl7Exception
	 */
	@SuppressWarnings("rawtypes")
	public ResultsDTO delTemplate(List templateIds) throws Hl7Exception;
	
	/**
	 * 更新模板，如可以是更新模板名称或者内容
	 * 如果不想更新模板内容，则将模板类容设置为null
	 * @param template
	 * @return
	 * @throws Hl7Exception
	 */
	public ResultsDTO updateTemplateFile(TemplateDTO template) throws Hl7Exception;
	
	/**
	 * 根据模板类别id获取模板列表，只有名称等信息，不包含内容（二进制文件）
	 * 不会根据角色过滤，查询所有的
	 * @param classId
	 * @return
	 * @throws Hl7Exception
	 */
	public ResultsDTO findTemplateList(String classId) throws Hl7Exception;
	
	/**
	 * 根据权限加载出当前登录人能看到的模板，默认加载全院模板和当前登录人所在科室的模板
	 * 默认为查看本科室的，当操作值为TEMPLATE_HOSPITAL，前台判断权限为查看所有
	 * 当roleType等于0的时候表明该用户具有查看全院和所有科室模板的权限
	 * @param classId 模板分类id 必须传的参数
	 * @param deptId 当前登录人有查看全院模板权限的时候，该值要设置为null
	 * @param roleType  判断是否有查看所有科室模板权限标识  0:具有查看所有科室模板权限  1：不具有查看所有科室权限
	 * @return
	 * @throws Hl7Exception
	 */
	public ResultsDTO findTemplateListByDeptId(String classId,String deptId,String roleType) throws Hl7Exception;
	
	/**
     * 根据权限加载出当前登录人能看到的模板，默认加载全院模板和当前登录人所在科室、病区的模板
     * 当roleType等于0的时候表明该用户具有查看全院和所有科室模板的权限
     * @param classId 模板分类id 必须传的参数
     * @param deptId 当前登录人所在的科室的Id
     * @param workGroupIds 当前登录人所在的工作组的Id集合
     * @param roleType  判断是否有查看所有科室模板权限标识  0:具有查看所有科室模板权限  1：不具有查看所有科室权限
     * @return
     * @throws Hl7Exception
     */
	public ResultsDTO findTemplateListByClassIdDeptIdWGIdsRoleType(String classId, String deptId, List<String> workGroupIds, String roleType ) throws Hl7Exception;
	
	/**
	 * 查询当前登录人自定义模板集合
	 * @param calssCode 模板分类编码
	 * @param empId 模板所属个人id
	 * @return
	 * @throws Hl7Exception
	 */
	public ResultsDTO findCustomizeTemplateList(String calssCode,String empId) throws Hl7Exception;
	
	/**
	 * 根据模板分类节点id集合拿到全部的模板文件(如小模板下所有的文件)
	 * @param classIds
	 * @return
	 * @throws Hl7Exception
	 */
	public ResultsDTO findTemplateList(List<Long> classIds) throws Hl7Exception ;
	
	/**
	 * 根据分类Code查询模板列表
	 * @param classCode 分类Code
	 * @return
	 * @throws Hl7Exception
	 */
	public ResultsDTO findTemplateListByClassCode(String classCode) throws Hl7Exception;
	
	/**
	 * 获取模板文件，模板的内容（二进制文件）
	 * @param templateId
	 * @return
	 * @throws Hl7Exception
	 */
	public ResultsDTO findTemplateFile(String templateId) throws Hl7Exception;
	
	/**
	 * 创建文档动作
	 * @param ce 文档动作的code值
	 * @return Document
	 * @throws Hl7Exception
	 */
	public Document createDocument(CE ce) throws Hl7Exception;
	
	/**
	 * 将Document信息提取到TemplateDTO中
	 * @param document
	 * @return
	 * @throws Hl7Exception
	 */
	public TemplateDTO convertDocToTemDTO(Document document) throws Hl7Exception;
	
	/**
	 * 组装模板所属范围到TemplateDTO中
	 * @param actId 模板动作id
	 * @param td TemplateDTO
	 * @throws Hl7Exception
	 */
	public void convertTemplateScopeToTempDoc(String actId,TemplateDTO td) throws Hl7Exception;
	
	/**
	 * 根据关键字（小模板）名称取模板内容
	 * @param fileName 关键字名称
	 * @return
	 * @throws Hl7Exception
	 */
	public ResultsDTO findTemplateListByName(String fileName) throws Hl7Exception;
	
}
